home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 November / Macworld (1999-11).dmg / Updaters / WhiteCap 3.0.4 / WhiteCap Source.sit / WhiteCap Source / Common / math / Headers / V3.h < prev    next >
C/C++ Source or Header  |  1999-07-24  |  2KB  |  68 lines

  1. #pragma once
  2.  
  3. #define PFloat float
  4. #define PI     3.141592653589793
  5.  
  6. #include <math.h>
  7. class R3Matrix;
  8. class Plane;
  9.  
  10.  
  11. class XYCord {
  12.  
  13.     public:
  14.         long mX, mY;
  15. };
  16.  
  17.  
  18. class V3 {
  19.  
  20.     public:
  21.         inline    PFloat        magnitudeSqr() const                        { return mX * mX + mY * mY + mZ * mZ;            }
  22.         inline    PFloat        magnitude()    const                            { return sqrt( mX * mX + mY * mY + mZ * mZ);    }
  23.         
  24.         inline    void        set( const V3& inPt )                        { *this = inPt;    }
  25.         inline    void        set( PFloat inX, PFloat inY, PFloat inZ )    { mX = inX; mY = inY; mZ = inZ;    }
  26.         
  27.         inline void            scale( PFloat inS, const V3& inPt )            { mX = inS*inPt.mX; mY = inS*inPt.mY; mZ = inS*inPt.mZ;    }
  28.         inline void            scale( PFloat inS )                            { mX *= inS; mY *= inS; mZ *= inS;                }
  29.         void                normalize();
  30.         
  31.         
  32.         inline PFloat        dot( const V3& inV ) const                    { return mX*inV.mX + mY*inV.mY + mZ*inV.mZ;        }
  33.         
  34.         void                transform( const R3Matrix& inMatrix );
  35.         void                transform( const R3Matrix& inMatrix, const V3& inPt );
  36.         
  37.         // Transforms the vector like the above two, but then applies a perspective transformation on the x and y coords
  38.         void                transform( const R3Matrix& inMatrix, float inPersZ );
  39.  
  40.         inline void            applyPerspective()                            { mX /= mZ; mY /= mZ;    }
  41.         
  42.         
  43.         inline void            subtract( const V3& inA )                    { mX -= inA.mX; mY -= inA.mY; mZ -= inA.mZ;                        } 
  44.         inline void            subtract( const V3& inA, const V3& inB )    { mX = inA.mX-inB.mX; mY = inA.mY-inB.mY; mZ = inA.mZ-inB.mZ;                        } 
  45.  
  46.         
  47.         inline void            add( PFloat inX, PFloat inY, PFloat inZ )    { mX += inX; mY += inY; mZ += inZ;                } 
  48.         inline void            add( const V3& inA, const V3& inB )            { mX = inA.mX+inB.mX; mY = inA.mY+inB.mY; mZ = inA.mZ+inB.mZ;                        } 
  49.         inline void            add( const V3& inA )                        { mX += inA.mX; mY += inA.mY; mZ += inA.mZ;                        } 
  50.  
  51.  
  52.         void                toPlane( const V3& inNormal );
  53.         void                fromPlane( const V3& inNormal );
  54.         
  55.         // Assigns intersection of a plane with a line to this pt
  56.         bool                intersection( const Plane& inPlane, const V3& inLine, const V3& inPt );
  57.  
  58.         // Rotates this pt around the line defined by inPt1 and inPt2
  59.         void                rotate( const V3& inPt1, const V3& inPt2, PFloat inAng );
  60.         
  61.         void                cross( const V3& inA );
  62.         void                cross( const V3& inA, const V3& inB );
  63.         
  64.         PFloat    mX, mY, mZ;        
  65.         
  66. };
  67.  
  68.